package proceso.busqueda;

import modelo.poligonal.Poligonal;
import modelo.regionRiego.RegionRiego;
import modelo.sector.Sector;

import org.hibernate.Query;
import org.hibernate.Session;

/**
 * 
 * @author edgar
 * determina para una region de riego el sector de pertenencia
 * se asume que la interseccion de sectores es nula.
 * Un sector puede estar definido or varios poligonos
 */
public class BuscarSectorDePertenencia {

	private Sector sector = null;
	private Poligonal poligonal;
	private String razon = "";
	
	
	public Sector getSector() {
		return sector;
	}

	public void setSector(Sector sector) {
		this.sector = sector;
	}

	public Poligonal getPoligonal() {
		return poligonal;
	}

	public void setPoligonal(Poligonal poligonal) {
		this.poligonal = poligonal;
	}

	public String getRazon() {
		return razon;
	}

	public void setRazon(String razon) {
		this.razon = razon;
	}

	public boolean buscarPorRegion(RegionRiego region, double este, double norte) {
		boolean encontrado = false;		
		for(int i=0; i<region.getListaSector().size();i++){
			sector = region.getListaSector().get(i);
			for(int j=0; j<sector.getListaPoligonal().size() && !encontrado; j++) {			
				poligonal = sector.getListaPoligonal().get(j);
				encontrado = poligonal.verificarPertenencia(este, norte);
			}
		}
		if(!encontrado) {
			razon = "El punto no pertenece a ning&uacute;n sector";
			return false;
		}
	return true;
	}
	
	public boolean buscar(Session sess, String nombreRegion, double este, double norte) {
		RegionRiego region;
		
		Query q;
		q = sess.createQuery("From RegionRiego as r where r.nombre like :nombreRegion");
		q.setParameter("nombreRegion", nombreRegion);
		if(q.list().size() == 1){
			region = (RegionRiego) q.list().get(0);
			boolean encontrado = false;		
			for(int i=0; i<region.getListaSector().size();i++){
				sector = region.getListaSector().get(i);
				for(int j=0; j<sector.getListaPoligonal().size() && !encontrado; j++) {			
					poligonal = sector.getListaPoligonal().get(j);
					encontrado = poligonal.verificarPertenencia(este, norte);
				}
			}
			if(!encontrado) {
				razon = "El punto no pertenece a ning&uacute;n sector";
				return false;
			}
		}
		else{
			razon =" No existe la region "+ nombreRegion;
			return false;
		}

		
		return true;
	}
}
